package com.yx.myinterest;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;

import com.yx.myinterest.log.LogUtil;

import java.io.File;
import java.io.FileOutputStream;

/**
 * Creator:Yx
 * Time:2023/3/7 11:48
 * Description: 下载文件到手机目录：
 * 获得手机中的各种类型地址
 */
public class FileUtils {
    public static Context mContext;

    /**
     * 获得一个：存储路径File的路径
     */
    public static String getAppFile() {
        return initFilePath().getPath() + "/";
    }


    // 构建文件夹及  按时间创建了一个空夹
    public static File initFilePath() {
        // 获得文件夹
        File takeImageFile;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            // 安卓10及以上 每个应用只访问自己私有目录的数据（安卓10可设置 android:requestLegacyExternalStorage="true"使用原先存储方式）
            // 私有总目录　当参数传null时 文件路径为：storage/emulated/0/Android/data/packagename/files
            File externalFilesDir = mContext.getExternalFilesDir(null);
            // 图片文件目录　当String为DIRECTORY_PICTURES时 文件返回路径为/storage/emulated/0/Android/data/packagename/files/Pictures
            File pictureDir = mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
            // 任何音频文件目录
            File[] podcastsDirs = mContext.getExternalFilesDirs(Environment.DIRECTORY_PODCASTS);
            // 铃声音频目录
            File[] ringones = mContext.getExternalFilesDirs(Environment.DIRECTORY_RINGTONES);
            // 警报音频目录
            File[] alarms = mContext.getExternalFilesDirs(Environment.DIRECTORY_ALARMS);
            // 通知音频目录
            File[] notifications = mContext.getExternalFilesDirs(Environment.DIRECTORY_NOTIFICATIONS);
            // 电影MP*目录
            File[] movies = mContext.getExternalFilesDirs(Environment.DIRECTORY_MOVIES);
            takeImageFile = mContext.getExternalFilesDir(null);

            // 当升级到安卓11后  android:requestLegacyExternalStorage="true"彻底失效。
            // Android11使用公共媒体目录如下：
            String documentDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).toString();
            String downloadDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
        } else {
            // android 9 及 以下
            if (existSDCard()) {
                // SD卡存在
                //  相册地址/DCIM/image/;文件地址/DCIM/file/
                takeImageFile = new File(Environment.getExternalStorageDirectory(), "/DCIM/file/");
            } else { // 不存在使用机身内存
                takeImageFile = Environment.getDataDirectory();
            }
            if (!takeImageFile.exists()) { // 没有就先创建
                takeImageFile.mkdir();
            }
        }
        return takeImageFile;
    }

    /**
     * 判断SDCard是否可用
     */
    public static boolean existSDCard() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     * 保存一张图片到APP私有目录
     * 使用：
     * Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
     * FileUtils.saveImageInSandbox(MainActivity.this, "ic_launcher.png", bitmap);
     */
    public static void saveImageInSandbox(Context context, String fileName, Bitmap bitmap) {
        try {
            String pictures = getAppFile();//图片沙盒文件夹
            LogUtil.iYx("--------------" + pictures);
            File folder = new File(pictures + "/");
            if (folder.exists()) {
                File file = new File(pictures + "/" + fileName);
                FileOutputStream fos = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                fos.flush();
                fos.close();
            } else if (folder.mkdir()) {//如果该文件夹不存在，则新建
                File imageFile = new File(pictures + "/" + fileName);
                FileOutputStream fos = new FileOutputStream(imageFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                fos.flush();
                fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            LogUtil.iYx("--------------error---------");
        }
    }


    /**
     * 判断Android 11 及以上APP是否有完全的外部存储访问权限
     *
     * @return true 有，false 没有
     */
    public static boolean judgeExternalStorage() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (Environment.isExternalStorageManager()) {
                return true;
            } else {
                /**
                 * 打开完全外部访问存储权限
                 * Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                 *      intent.setData(Uri.parse("package:" + getPackageName()));
                 *      startActivityForResult(intent, 10001);
                 */
                return false;
            }
        }
        return true;
    }


}
